home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 2002 November / SGI IRIX Base Documentation 2002 November.iso / usr / share / catman / u_man / cat1 / ddopt.z / ddopt
Encoding:
Text File  |  2002-10-03  |  8.2 KB  |  182 lines

  1. DDOPT(1)                                               Last changed: 1-4-99
  2.  
  3.  
  4. NNAAMMEE
  5.      ddddoopptt - MIPS Data-Dependency-based Optimizer
  6.  
  7. SSYYNNOOPPSSIISS
  8.      ddddoopptt _u_n_o_p_t__f_i_l_e _o_p_t__f_i_l_e [ --vv --mmiippss33 --hhoossttccaacchhee --ccaacchheesszz "" ssiizzee"" ]
  9.  
  10. IIMMPPLLEEMMEENNTTAATTIIOONN
  11.      IRIX systems
  12.  
  13. DDEESSCCRRIIPPTTIIOONN
  14.      ddddoopptt,, the MIPS data-dependency-based optimizer, reads the input
  15.      binary ucode file on a procedure by procedure basis, performs loop-
  16.      based transformations on each outer-most loop nest in each procedure
  17.      and outputs the optimized binary ucode file.  By convention, it takes
  18.      a binary ucode file with the extensions .B or .M as input and output a
  19.      binary ucode file with the extension .D.  In the compilation process,
  20.      ddddoopptt runs after the front-end, after uulldd and uusspplliitt, and before
  21.      uummeerrggee, uuoopptt, and uuggeenn.  Currently, ddddoopptt only takes ucode files
  22.      generated from FORTRAN.
  23.  
  24.      ddddoopptt borrows optimization techniques that originated from compilers
  25.      for supercomputers and adapts them to apply to scalar machines.  It
  26.      performs high-level analysis on the behavior of array accesses in
  27.      loops, deriving what we call data dependency information.  Numerous
  28.      optimization transformations on the program code are performed based
  29.      on such information (and thus the name ddddoopptt )).. The transformations
  30.      are invariantly associated with program loops that operate on arrays.
  31.  
  32.      There are different kinds of transformations performed by ddddoopptt that
  33.      benefit program performance:
  34.  
  35.      1. Those that reduce memory references.  Techniques include re-using
  36.         array references that have been allocated to register (register
  37.         allocation for array references) and moving array references and
  38.         assignments outside loops.
  39.  
  40.      2. Those that improve locality of memory references (thus reducing
  41.         data cache misses).  Techniques include changing the order of loop
  42.         nests (loop interchange) and partitioning loop iterations to
  43.         operate on smaller sections of array (strip-mining).
  44.  
  45.      3. Those that reduce floating-point interlocks and promote greater
  46.         parallelism among floating-point operations by promoting larger
  47.         pieces of straight-line code in loops.  Techniques include
  48.         unrolling and unrolling-and-jam (unroll outer loop and jam the
  49.         resulting copies of the inner loop into one bigger loop).
  50.  
  51.      There are other optimizations that ddddoopptt does just to bring in more
  52.      opportunities for doing the above transformations:  local common
  53.      subexpression, secondary index variable elimination, constant
  54.      propagation, copy propagation, constant folding, jump folding and dead
  55.      code elimination.  Some of these optimizations duplicate the
  56.      optimizations performed in uuoopptt.  These optimizations are applied
  57.      iteratively until there is no more change to the code, and they
  58.      precedes the data-dependency-based analyses and transformations.
  59.  
  60.      The following options are interpreted by ddddoopptt.  Options starting with
  61.      --XX are not recognized by the compiler driver, and have to be passed to
  62.      ddddoopptt via --WWdd,,.......
  63.  
  64.      --vv      Turns on verbose mode.  In this mode, ddddoopptt will print the
  65.              name of the procedure it is currently optimizing.
  66.  
  67.      --mmiippss33  Tells ddddoopptt that the target machine uses the MIPS3 instruction
  68.              set.
  69.  
  70.      --hhoossttccaacchhee
  71.              Tells ddddoopptt to assume that the target machine has the same
  72.              data cache size as the host machine, so it can find out the
  73.              cache size via system call.
  74.  
  75.      --ccaacchheesszz "" _s_i_z_e""
  76.              Gives ddddoopptt the data cache size of the target machine, in
  77.              bytes.  The default is 8192 bytes.
  78.  
  79.      --XXbbllddggrr Dumps the data dependency information computed, for debugging
  80.              purpose.
  81.  
  82.      --XXbbbbooppttooffff
  83.              Turns off the conventional global optimizations that precede
  84.              the data-dependency-related transformations.
  85.  
  86.      --XXbbff "" _s_i_z_e""
  87.              Changes the blocking factor used by ddddoopptt in strip-mining.
  88.              The default is 36 bytes.
  89.  
  90.      --XXdduummpp  Tells ddddoopptt to dump the original and transformed program in a
  91.              compact, close-to-source-level format.
  92.  
  93.      --XXddoossiizzeetthhrreesshhoolldd "" _c_o_u_n_t""
  94.              If the number of statements in a DO loop exceeds this number,
  95.              that DO loop is excluded from transformation by ddddoopptt.. The
  96.              default is 150.
  97.  
  98.      --XXggccooppyyooffff
  99.              Turns off global copy propagation.
  100.  
  101.      --XXiinntteerrooffff
  102.              Turns off loop interchange.
  103.  
  104.      --XXiinnddeepprreeggooffff
  105.              Turns off loop-independent dependence register allocation.
  106.  
  107.      --XXiinnppuuttrreeggooffff
  108.              Turns off input dependence register allocation.
  109.  
  110.      --XXiinnvvaarrrreeggooffff
  111.              Turns off loop-invariant register allocation.
  112.  
  113.      --XXllccooppyyooffff
  114.              Turns off local copy propagation.
  115.  
  116.      --XXmmeerrggeeppiibblloocckkooffff
  117.              Disallows the merging of pi-blocks created for statements in
  118.              the same basic blocks.
  119.  
  120.      --XXmmoorreeuunnrroolllljjaamm
  121.              By default, unroll-and-jam are performed only on inner loop
  122.              nests that come out of strip-mining.  This flag removes this
  123.              restriction and tells ddddoopptt to do unroll-and-jam whenever it
  124.              is advantageous.
  125.  
  126.      --XXmmaaxx__iinntt__rreeggss
  127.              Tells ddddoopptt the number of integer registers available in the
  128.              underlying machine.  The default is 32.
  129.  
  130.      --XXmmaaxx__ffllooaatt__rreeggss
  131.              Tells ddddoopptt the number of floating-point registers available
  132.              in the underlying machine.  The default is 16.
  133.  
  134.      --XXooffffffoooo
  135.              Turns off all transformation for the given procedure name
  136.              (ffoooo, in this case).
  137.  
  138.      --XXoouuttppuuttrreeggooffff
  139.              Turns off output dependence register allocation.
  140.  
  141.      --XXoovveerraallllooccaattee
  142.              Tells ddddoopptt to perform register allocation without regard to
  143.              the number of registers available in the underlying machine.
  144.  
  145.      --XXssttrriippooffff
  146.              Turns off strip-mining.
  147.  
  148.      --XXssttrriippoonnllyy
  149.              Tells ddddoopptt to perform strip-mining but prevent the newly-
  150.              formed loops from being interchanged into a deeper region of
  151.              the loop nest, for debugging purpose only.
  152.  
  153.      --XXssttaatt  Prints optimization statistics to give line numbers and number
  154.              of times various transformations were applied.
  155.  
  156.      --XXttrruueerreeggooffff
  157.              Turns off true dependence register allocation.
  158.  
  159.      --XXuunnrroollllooffff
  160.              Turns off loop unrolling.
  161.  
  162.      --XXuunnrroolllljjaammooffff
  163.              Turns off unroll-and-jam.
  164.  
  165.      --XXuunnrroolllltthhrreesshhoolldd "" ccoouunntt""
  166.              Sets the threshold that limits the extent to which unrolling
  167.              can be performed without causing the number of statements in
  168.              the loop to exceed this number.  The default is 180.
  169.  
  170.      --XXuunnrroollllttiimmeess "" _c_o_u_n_t""
  171.              Sets the maximum number of times to unroll a loop.  The
  172.              default is 4.
  173.  
  174. DDIIAAGGNNOOSSTTIICCSS
  175.      ddddoopptt assumes the input ucode file is error-free.
  176.  
  177. SSEEEE AALLSSOO
  178.      uuccooddee(1), uuoopptt(1), bbttoouu(1), ppppuu(1)
  179.  
  180.      This man page is available only online.
  181.  
  182.